\chapter{Introduction}

Nous présentons ci-après l'article \textbf{Evaluation and Optimization of Multicore Performance Bottlenecks in Supercomputing Applications}. Il a été écrit par les auteurs suivants : Jeff Diamond, Martin Burtscher, John D. McCalpin, Byoung-Do Kim, Stephen W. Keckler, James C. Browne tous originaires du Texas, sauf Stephen W. Keckler de NVIDIA. Il a été présenté lors de la Conférence ISPASS en 2011.


Les supercalculateurs modernes sont communément composés de plusieurs noeuds de processeurs multicoeurs.
\begin{figure}[htb]
	\begin{center}
		\includegraphics[width=7cm]{images/ranger}
		\caption{Le cluster Ranger}
		\label{clusterR}
	\end{center}
\end{figure}

La figure \ref{clusterR} montre une photo du supercalculateur \textbf{Ranger}, situé au \textbf{Texas}, qui a servi de support à l'étude réalisé dans cet cet article. 


\begin{figure}[htb]
	\begin{center}
		\includegraphics[width=7cm]{images/nehalem}
		\includegraphics[width=7cm]{images/barcelona}		
		\caption{Processeurs quad-cores Intel Nehalem et AMD Barcelona}
		\label{procs}
	\end{center}
\end{figure}
La figure \ref{procs} présente les processeurs quad-cores \textit{Intel Nehalem} et \textit{AMD Barcelona}

\begin{figure}[htb]
	\begin{center}
		\includegraphics[width=7cm]{images/node.png}
		\caption{Un noeud comprenant 4 processeurs quad-cores}
		\label{node}
	\end{center}
\end{figure}

Enfin, la figure \ref{node} illustre un exemple de noeud composé de 4 \textit{sockets} accueillant chacun un processeur \textit{quad core}.



Maximiser les performances d'un programme exécuté sur ce type d'architecture requiert des techniques de mesure, d'analyse et d'optimisation spécialisées.
Beaucoup d'applications ont été portées avec peu ou pas d'optimisation et ne tirent donc pas profit des capacités du système. Une attention toute particulière est portée à l'optimisation d'applications destinées à être exécutées sur des supercalculateurs, mais il n'existe pas de méthode systématique. L'obtention de performances sur ce type d'architecture est difficile à obtenir. En effet, il y a des phénomènes particuliers qui n'existent pas dans les processeurs monocoeur. Par exemple, les effets d'interférence, lorsque deux coeurs modifient une donnée appartenant à la même ligne de cache, ou les effets NUMA (\textit{Non Uniform Memory Access}) : le coût d'accès à la mémoire DRAM n'est pas le même suivant le coeur qui y accède.

Historiquement, les optimisations de code se sont focalisées sur la diminution de la charge de calcul : déroulage de boucle et mémorisation des valeurs calculées précédemment. Ensuite, avec la puissance grandissante des processeurs les applications sont devenues non plus \textit{cpu-bound}, limitées par la puissance de calcul du processeur, mais \textit{memory-bound}, limitées par les accès mémoire. La latence mémoire et la largeur de la bande passante sont devenus des éléments clés du gain de performances.

Les optimisations typiques pour processeur monocoeur ciblent l'amélioration de l'utilisation des caches, et la régularité des lectures/écritures afin d'aider les \textit{prefetchers}.
Comparativement, peu d'effort a été fait sur l'optimisation de l'utilisation des mémoires non locales. Du fait du partage des ressources dans la hiérarchie mémoire, les applications multicoeurs ont tendance à être limitées par la largeur de la bande passante \textit{off-chip}.

Les auteurs s'intéressent à cette question en trois temps :
\begin{enumerate}
	\item Etude des métriques traditionnelles, telles que les taux de \textit{cache miss} et constat du fait que, non seulement elles ne sont pas adaptées aux supercalculateurs, mais en plus elles peuvent induire en erreur.
	\item Identification et caractérisation de trois principaux goulots d'étranglement spécifiques aux systèmes basés sur des processeurs multicoeurs.
	\item Présentation de nouveaux challenges pour la mesure des performances, proposition d'un processus systématique pour l'analyse ainsi que d'une technique d'optimisation.
\end{enumerate}
